home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
src
/
X11
/
seyon
/
SeString.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-03
|
5KB
|
294 lines
/*
* This file is part of the Seyon, Copyright (c) 1992-1993 by Muhammad M.
* Saggaf. All rights reserved.
*
* See the file COPYING (1-COPYING) or the manual page seyon(1) for a full
* statement of rights and permissions for this program.
*/
#include <ctype.h>
#include "config.h"
#include "SeDecl.h"
char *str_strip_lead_end_space(),
*str_strip_lead_space(),
*str_strip_end_space();
/*
* string routines
*/
char
itoa(num)
int num;
{
char buf[TIN_BUF];
sprintf(buf, "%d", num);
return buf[0];
}
/*
* replace unwanted characters with something else
*/
char *
str_filter(str, unwanted, replacement)
char *str,
*unwanted;
char replacement;
{
int i,
j;
for (i = 0; str[i]; i++)
for (j = 0; unwanted[j]; j++)
if (str[i] == unwanted[j])
str[i] = replacement;
return str;
}
/*
* strip spaces from both ends of a string
*/
char *
str_strip_lead_end_space(str)
char *str;
{
return str_strip_lead_space(str_strip_end_space(str));
}
/*
* strip spaces from the beginning a string
*/
char *
str_strip_lead_space(str)
char *str;
{
int i;
for (i = 0; isspace(str[i]); i++);
return str + i;
}
/*
* strip spaces from the end a string
*/
char *
str_strip_end_space(str)
char *str;
{
int i;
for (i = strlen(str) - 1; i>0 && isspace(str[i]); i--);
str[++i] = '\0';
return str;
}
char *
str_stripspc_copy(dest, source)
char *dest,
*source;
{
char buffer[REG_BUF],
*bufptr;
strcpy(buffer, source);
bufptr = str_strip_lead_end_space(buffer);
return strcpy(dest, bufptr);
}
char *
str_strip_end_char(str)
char *str;
{
int length;
length = strlen(str);
if(length>0) str[length - 1] = '\0';
return str;
}
char*
StripSpace(str)
char *str;
{
static char strBuf[LRG_BUF];
str_stripspc_copy(strBuf, str);
return strBuf;
}
char*
FmtString(fmt, a, b, c)
char *fmt, *a, *b, *c;
{
static char strBuf[LRG_BUF];
sprintf(strBuf, fmt, a, b, c);
return strBuf;
}
/*
* find first occurance of str2 in str1 and return a pointer to it
*/
#if !HAVE_STRSTR
char *
strstr(str1, str2)
char *str1,
*str2;
{
char *Sptr,
*Tptr;
int len = strlen(str1) - strlen(str2) + 1;
if (*str2)
for (; len > 0; len--, str1++) {
if (*str1 != *str2)
continue;
for (Sptr = str1, Tptr = str2; *Tptr != '\0'; Sptr++, Tptr++)
if (*Sptr != *Tptr)
break;
if (*Tptr == '\0')
return str1;
}
return NULL;
}
#endif
char *
strsqtok(str)
char *str;
{
char *line,
*wrd;
static char *saved_ptr;
if (str == NULL)
line = saved_ptr;
else
line = str;
while (isspace(*line) && *line)
line++;
if (*line == '\0')
return NULL;
else if (*line == '\"')
for (wrd = ++line; *line != '\"' && *line; line++);
else
for (wrd = line; !isspace(*line) && *line; line++);
if (*line == '\0')
saved_ptr = line;
else
saved_ptr = line + 1;
*line = '\0';
return wrd;
}
/*
* return the first word of a string and set the start of the string
* to point to the next one
*/
/*
* WARNING: words returned by this routine are not null-termnated
*/
char *
str_parse(buf)
char **buf;
{
char *line,
*wrd;
/*
* Remember: *buf is a pointer to the string, **buf is a character
* in the string
*/
line = *buf;
while (isspace(*line) && *line)
line++;
if (!(*line))
return NULL;
else if (*line == '\"') {
for (wrd = ++line; *line != '\"' && *line; line++);
*line = '\0';
line++;
}
else
for (wrd = line; !isspace(*line) && *line; line++);
*buf = line;
return wrd;
}
/*
* this routine is not currently used, and I'm not if it works
*/
char *
get_word(str, word)
char *str,
*word;
{
char *wrd,
c;
while (isspace(*str) && *str)
str++;
if (!(*str))
word[0] = '\0';
else if (*str == '\"') {
for (wrd = ++str; *str != '\"' && *str; str++);
*str = '\0';
strcpy(word, wrd);
*str = '\"';
str++;
}
else {
for (wrd = str; !isspace(*str) && *str; str++);
c = *str;
*str = '\0';
strcpy(word, wrd);
*str = c;
}
return str;
}
#if !HAVE_STRERROR
char *
strerror(err)
int err;
{
extern char *sys_errlist[];
return sys_errlist[err];
}
#endif